Multi Level paging system

다중 단계 페이징 시스템
32bit 시스템에서 4KB 페이지를 위한 페이징 시스템은
    하위 12bit는 offset
    상위 20bit는 페이징 번호이므로, 2의 20승개의 페이지 정보가 필요하다.
4(주소 표기하는데 4byte 필요)X2^20=> 프로세스당 4MB 필요
페이징 정보를 단계로 나누어 생성
    필요없는 페이지는 생성하지 않으면, 공간 절약 가능
page directory->page table(필요한 페이지 테이블만 생성)

페이지 번호를 나타내는 bit를 구분해서, 단계를 나눈다.(리눅스는 3단계, 최근 4단계)

선형주소(linear address) 10bit(PAGE DIRECTORY), 10bit(PAGE TABLE), 12bit(OFFSET)
페이지 디렉토리의 시작 주소를 CR3 레지스터에 load
(MMU가 이 주소를 이용해서 가상메모리에 접근 후, 데이터를 가져온다.)
페이지 디렉토리는 사용하는 페이지 테이블의 시작주소를 load
페이지 테이블은 물리 메모리에서 프레임 주소를 load
물리 메모리 프레임 주소(페이지 4KB)에서 offset을 통해 원하는 주소로 접근(byte)
MMU와 TLB
1. CPU MMU에 Virtual address를 주면서 데이터 요청
2. MMU CR3 레지스터를 통해 Memory의 page table에서 virtual address에 대한 physical address 얻음
3. MMU physical address에 접근해서 데이터 얻음
4. CPU에 데이터 전달

MMU가 물리 주소를 확인하기 위해서 메모리에 접근해야 한다.
메모리에 접근하기 위해서 많은 시간이 소요된다.(메모리에 2번 접근해야함)
TLB(Translation Lookaside Buffer): 페이지 정보 캐쉬
1. CPU MMU에 virtual address 전달하면서 데이터 요청
2. virtual address TLB를 통해서 캐쉬 확인
3. TLB에 virtual address에 대한 physical address 캐쉬 있으면 전달받음
4. TLB에서 얻은 physical address로 MMU를 통해서 memory에서 데이터 얻음
5. MMU CPU에 데이터 전달